package me.twoday.library.mine.common;

import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;

/**
 * 이미지 처리 관련 유틸리티 클래스
 * 
 * @author 박우람
 * @since 2011.02.14
 */
public class ImageUtil
{
	/**
	 * 이미지의 라운드 처리를 하는 메서드
	 * 
	 * @param bitmap 변환할 비트맵 이미지
	 * @param pixels 라운드 처리할 픽셀
	 * @return 모서리가 라운드처리된 이미지
	 */
	public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels)
	{
		if(bitmap == null)
		{
			return null;
		}
		
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
        		bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int color = 0xff424242;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);
        final float roundPx = pixels;

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        return output;
    }
	
	/**
	 * 이미지를 리사이즈 합니다.
	 * 
	 * @param bitmap 비트맵 이미지
	 * @param newWidth 리사이즈할 가로 길이
	 * @param newHeight 리사이즈할 세로 길이
	 * @return 크기가 변경된 비트맵 이미지
	 */
	public static Bitmap getResizedBitmap(Bitmap bitmap, int newWidth, int newHeight)
	{
		int width = bitmap.getWidth();
		int height = bitmap.getHeight();
		
		float rate = 0.0f;
		int scaleWidth = width;
		int scaleHeight = height;
		
		if(width > height)
		{
			if(newWidth < width)
			{
				rate = (float)newWidth / width;
				scaleWidth = newWidth;
				scaleHeight = (int)(height * rate);
			}
		}
		else
		{
			if(newHeight < height)
			{
				rate = (float)newHeight / height;
				scaleHeight = newHeight;
				scaleWidth = (int)(width * rate);
			}
		}

		return Bitmap.createScaledBitmap(bitmap, scaleWidth, scaleHeight, true);
	}
}
